require 'vagrant/plugin'
require 'sqlite3'


module Vagrant
  module NodeMaster
   
		class NodeOperationCommand < Vagrant.plugin(2, :command)
			
			def initialize(argv, env)
				super
				
				@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)				
				
				
				@subcommands = Vagrant::Registry.new
				
				@subcommands.register(:show) do
					require File.expand_path("../nodeoperationshow", __FILE__)
					NodeOperationShow
				end       
				
				@subcommands.register(:last) do
					require File.expand_path("../nodeoperationlast", __FILE__)
					NodeOperationLast
				end				
								
			end

			
			
			
			
			def execute
				if @main_args.include?("-h") || @main_args.include?("--help")
					# Print the help for all the box commands.
					return help
				end
				
				
				
			  # If we reached this far then we must have a subcommand. If not,
				# then we also just print the help and exit.
				command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
				return help if !command_class || !@sub_command
				@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")	  
			  
			  begin
					# Initialize and execute the command class
					command_class.new(@sub_args, @env).execute
				rescue Exception => e
					@env.ui.error(e.message)
				end
			  
    
				0
			end
			
			def help
				opts = OptionParser.new do |opts|
					opts.banner = "Usage: vagrant node <command> [<args>]"
					opts.separator ""
					opts.separator "Available subcommands:"
			
					# Add the available subcommands as separators in order to print them
					# out as well.
					keys = []
					@subcommands.each { |key, value| keys << key.to_s }
			
					keys.sort.each do |key|
						opts.separator "     #{key}"
					end
			
					opts.separator ""
					opts.separator "For help on any individual command run `vagrant node COMMAND -h`"
				end
			
				@env.ui.info(opts.help, :prefix => false)
			end
			
			
		end
		
	end
end
